Mapas

Sumário

  • Dados espaciais

  • Leaflet

  • Googleways

Dados espaciais:

  • Pacotes
  • GEOBR
  • Shapefile
  • geoJSON

Dados espaciais:

  • Pacotes
  • GEOBR
  • Shapefile
  • geoJSON

Geobr

Geobr

Geobr

É um pacote para download de conjuntos de dados espaciais oficiais do Brasil. O pacote inclui uma ampla gama de dados geoespaciais em formato de geopacote (como shapefiles).

Exemplo

# Ler município específico em um determinado ano
mun <- geobr::read_municipality(code_muni = 5300108, year = 2017)
# 5300108 = Brasília
# Ler todos os municípios de um estado específico em um determinado ano
mun <- geobr::read_municipality(code_muni = 33, year = 2010) # ou
mun <- geobr::read_municipality(code_muni = "RJ", year = 2010)

# Ler todos os municípios do país em um determinado ano
mun <- geobr::read_municipality(code_muni = "all", year = 2018)

IBGE

Funções

Exemplos

Estados Brasileiros

library(ggplot2)
library(geobr)
estados <- geobr::read_state(
  year = 2019, 
  showProgress = FALSE
)

# Plotar todos os estados brasileiros
g1 <- ggplot() +
  geom_sf(data=estados, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = FALSE) +
  labs(subtitle="Estados", size=8) +
  theme_minimal() 

Dados espaciais:

  • Pacotes
  • GEOBR
  • Shapefile
  • geoJSON

Shapefile

O que é um Shapefile?

  • Formato popular para dados geoespaciais.
  • Armazena informações geométricas e atributos em múltiplos arquivos.
  • Normalmente composto por três arquivos principais: .shp, .shx, .dbf.

Como encontrar?

  • Sites de instituições geográficas/governo
  • Sites de banco de dados
  • Natural Earth (rnaturalearth)

Aplicação no R

  • Pacotes: Simple Features (sf) e ggplot2
  • Geometria: geom_sf

Funções principais

  • Ler dados espaciais: read_sf, st_read, etc
  • Operações geométricas: st_disjoint, st_intersects, etc
  • Visualização: geom_sf

Cheat Sheet

Aplicação

Banco de dados

  • Natural Earth
  • https://www.naturalearthdata.com/downloads/50m-cultural-vectors/
  • Contém várias informações referente aos países do mundo, incluindo a geometria.

Lendo o banco de dados

my_sf<- read_sf("shapefile/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp")

my_sf %>%
  select(SOVEREIGNT, POSTAL, CONTINENT, NAME_PT, ISO_A3,geometry) %>%
  head()
Simple feature collection with 6 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -73.36621 ymin: -22.40205 xmax: 109.4449 ymax: 41.9062
Geodetic CRS:  WGS 84
# A tibble: 6 × 6
  SOVEREIGNT POSTAL CONTINENT     NAME_PT   ISO_A3                      geometry
  <chr>      <chr>  <chr>         <chr>     <chr>             <MULTIPOLYGON [°]>
1 Zimbabwe   ZW     Africa        Zimbábue  ZWE    (((31.28789 -22.40205, 31.19…
2 Zambia     ZM     Africa        Zâmbia    ZMB    (((30.39609 -15.64307, 30.25…
3 Yemen      YE     Asia          Iémen     YEM    (((53.08564 16.64839, 52.581…
4 Vietnam    VN     Asia          Vietname  VNM    (((104.064 10.39082, 104.083…
5 Venezuela  VE     South America Venezuela VEN    (((-60.82119 9.138379, -60.9…
6 Vatican    V      Europe        Vaticano  VAT    (((12.43916 41.89839, 12.430…
ggplot(my_sf) +
  geom_sf(fill = "#69b3a2", color = "white")+
  theme_minimal() 
library(rnaturalearth)
my_sf |>
  filter(CONTINENT == "South America") |>
  ggplot() +
  geom_sf(fill = "lightblue", color = "black") +
  geom_sf_text(aes(label = NAME_PT), size = 2)+
  theme_minimal()
poluicao<- read_csv("shapefile/GCB2022v27_MtCO2_flat.csv") |>
  filter(Year > 2000) 

mapa_poluicao <- left_join(my_sf |>
                             select(ISO_A3, NAME_PT, geometry),
                           poluicao, by = c("ISO_A3" = "ISO 3166-1 alpha-3"))


mapa<- ggplot(data = mapa_poluicao) +
  geom_sf(aes(fill = Total)) +  
  scale_fill_viridis_c(option = "turbo") +  
  labs(title = "Quantidade de Poluição por País") +
  theme_minimal()

Referências

  • https://ipeagit.github.io/geobr/#r-reading-the-data-as-an-sf-object

Leaflet

Leaflet

Leaflet

Leaflet é uma das bibliotecas open source mais famosas para mapas iterativos.

Características

  • Panorâmica e zoom iterativos.
  • Compor mapas com marcadores, polígonos, linhas, popups e dentro outros.
  • Incorporar mapas em documentos knitr/R Markdown/Quarto e aplicativos Shiny.
  • Renderizar facilmente objetos espaciais dos pacotes sp ou sf, ou data frames com colunas de latitude/longitude.

Mapa Estático da UnB

library(leaflet)
# lê o arquivo geojson como um objeto espacial "sp"
dados = geojsonio::geojson_read("leaflet/pontos_unb.geojson", what = "sp")

# cria o mapa estático
mapa = leaflet(dados, options = leafletOptions(dragging = FALSE, 
                                               touchZoom = F, 
                                               doubleClickZoom = F, 
                                               zoomControl = F, 
                                               scrollWheelZoom = F)) %>%
  # adiciona os tiles do mapa 
  addTiles() %>%
  
  # adiciona os marcadores
  addMarkers(lng = dados@coords[,1], 
             lat = dados@coords[,2], 
             label = dados$nome,
             popup = dados$descricao)

UnB

Mapa Estático do Brasil

if(!file.exists("leaflet/brasil.geojson")) {
  # cria o arquivo geojson a partir do arquivo json
  dados_brasil = st_read("leaflet/brazil_geo.json/brazil_geo.json") %>%
    st_write("leaflet/brasil.geojson", driver = "GEOJSON")
}

# lê o arquivo geojson como um objeto espacial "sp"
dados_brasil = geojsonio::geojson_read("leaflet/brasil.geojson", what = "sp")

# paleta de cores para cada estado
cores = colorFactor(terrain.colors(length(dados_brasil$id)), dados_brasil$id)

# cria o mapa estático
mapa_b = leaflet(dados_brasil, options = leafletOptions(dragging = FALSE, 
                                               touchZoom = F, 
                                               doubleClickZoom = F, 
                                               zoomControl = F, 
                                               scrollWheelZoom = F)) %>%
  
  # adiciona os tiles do mapa com imagens de satélite
  addTiles(urlTemplate = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
           options = tileOptions(
             attribution = 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
           )) %>%
  
  # adiciona os polígonos
  addPolygons(stroke = F,
              fillOpacity = 1,
              fillColor = ~cores(dados_brasil$id),
              label = dados_brasil$id,
              popup = dados_brasil$name)

Brasil

Mapa Interativo de Câmeras de Segurança

library(sf)
# lê o arquivo geojson como um objeto espacial "sp"
dados_cameras = geojsonio::geojson_read("leaflet/Cameras_de_Seguranca.geojson", what = "sp")

# converte as coordenadas UTM para latlog
coords = dados_cameras %>%
  as_tibble() %>%
  st_as_sf(coords = c("point_x","point_y"), 
           crs = "+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs") %>%
  st_transform(crs = 4326) %>%
  st_coordinates()

# substitui as coordenadas UTM pelas coordenadas latlog
dados_cameras$point_x = coords[,"X"]
dados_cameras$point_y = coords[,"Y"]

# funcao que padroniza os popupinfo de cada camera
set_popup = function(popup) {
  popup = str_to_lower(popup) %>%
    str_trim()
  
  if(str_length(popup) == 0) return("N/A")
  
  if(str_detect(popup, "furtad") || str_detect(popup, "vandalizad")) return("Furtada/Vandalizada")
  else if(str_detect(popup, "não")) return("Não Instalada")
  
  return("Instalada")
}

# substitui para os popupinfo padronizado
dados_cameras$popupinfo = unlist(map(dados_cameras$popupinfo, set_popup))

# paleta de cores para cada estado da camera
pal = colorFactor(c("green", "orange", "red", "blue"), 
                  domain = c("Instalada", "Furtada/Vandalizada", "Não Instalada", "N/A"), ordered = T)

# cria o mapa
mapa_c = leaflet(dados_cameras) %>%
  
  # adiciona o tiles do mapa
  addTiles() %>%
  
  # define uma visão inicial
  setView(lng = -47.88281317652584, lat = -15.79409191690003, zoom = 12) %>%
  
  # adiciona os marcadores
  addCircleMarkers(lng = ~dados_cameras$point_x, 
                   lat = ~dados_cameras$point_y, 
                   label = ~dados_cameras$name, 
                   popup = ~dados_cameras$popupinfo, 
                   color = ~pal(dados_cameras$popupinfo),
                   radius = 6)

Câmeras de Segurança

Mapa Interativo das Regiões Administrativas DF

if(!file.exists("leaflet/regioes_adm_df.geojson")) {
  # cria o arquivo geojson a partir do arquivo json
  dados_brasil = st_read("leaflet/regioes_adm_df.json") %>%
    st_write("leaflet/regioes_adm_df.geojson", driver = "GEOJSON")
}

# lê o arquivo geojson como um objeto espacial "sp"
dados_regioes = geojsonio::geojson_read("leaflet/regioes_adm_df.geojson", what = "sp")

# paleta de cores para cada região administrativa
cores = colorFactor("Paired", dados_regioes$id)

# cria o mapa
mapa_df = leaflet(dados_regioes) %>%
  
  # adiciona os tiles
  addTiles() %>%
  
  # adiciona os polígonos
  addPolygons(stroke = T,
              fillOpacity = 0.75,
              smoothFactor = 0.5,
              color = "black",
              weight = 1,
              opacity = 1,
              fillColor = ~cores(dados_regioes$id),
              label = dados_regioes$ra)

Regiões Administrativas DF

Googleway